]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
messageTray: Allow opening the context menu on long press
authorAdel Gadllah <adel.gadllah@gmail.com>
Fri, 15 Feb 2013 15:09:44 +0000 (16:09 +0100)
committerAdel Gadllah <adel.gadllah@gmail.com>
Sat, 16 Feb 2013 18:37:26 +0000 (19:37 +0100)
Right click does not work for touch devices, so support opening the menu
using long press as well.

https://bugzilla.gnome.org/show_bug.cgi?id=693887

js/ui/messageTray.js

index 8af765dfcf7f470f77d16c3c5a88d8dbbb523b58..512cb53adc4118c531b864fe61481b4fbe7dff2c 100644 (file)
@@ -1741,25 +1741,24 @@ const MessageTray = new Lang.Class({
         this._updateNoMessagesLabel();
 
         this._contextMenu = new MessageTrayContextMenu(this);
-        this._grabHelper.addActor(this._contextMenu.actor);
-        this.actor.connect('button-press-event', Lang.bind(this, function(actor, event) {
-            let button = event.get_button();
-            if (button == 3) {
-                let [stageX, stageY] = event.get_coords();
-                this._lock();
-                this._contextMenu.setPosition(Math.round(stageX), Math.round(stageY));
-                this._grabHelper.grab({ actor: this._contextMenu.actor,
-                                        grabFocus: true,
-                                        onUngrab: Lang.bind(this, function () {
-                                            this._unlock();
-                                            this._contextMenu.close();
-                                        })
-                });
-                this._contextMenu.open();
-            }
-            else {
-                this._grabHelper.ungrab({ actor: this._contextMenu.actor });
+
+        let clickAction = new Clutter.ClickAction();
+        this.actor.add_action(clickAction);
+
+        clickAction.connect('clicked', Lang.bind(this, function(action) {
+            let button = action.get_button();
+            if (button == 3)
+                this._openContextMenu();
+        }));
+
+        clickAction.connect('long-press', Lang.bind(this, function(action, actor, state) {
+            switch (state) {
+            case Clutter.LongPressState.QUERY:
+                return true;
+            case Clutter.LongPressState.ACTIVATE:
+                this._openContextMenu();
             }
+            return false;
         }));
 
         this._contextMenu.actor.hide();
@@ -1767,6 +1766,20 @@ const MessageTray = new Lang.Class({
 
     },
 
+    _openContextMenu: function () {
+        let [x, y, mask] = global.get_pointer();
+        this._lock();
+        this._contextMenu.setPosition(Math.round(x), Math.round(y));
+        this._grabHelper.grab({ actor: this._contextMenu.actor,
+                                grabFocus: true,
+                                onUngrab: Lang.bind(this, function () {
+                                    this._contextMenu.close();
+                                    this._unlock();
+                                })
+        });
+        this._contextMenu.open();
+    },
+
     close: function() {
         this._escapeTray();
     },